package com.zzj.ecology.system.mapper.system;

import com.zzj.ecology.system.bean.system.SysPermission;
import com.zzj.ecology.system.bean.system.SysPermissionExample;
import com.zzj.ecology.system.bean.vo.dtree.DTree;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SysPermissionMapper {
    long countByExample(SysPermissionExample example);

    int deleteByExample(SysPermissionExample example);

    int deleteByPrimaryKey(Integer permissionId);

    int insert(SysPermission record);

    int insertSelective(SysPermission record);

    List<SysPermission> selectByExample(SysPermissionExample example);

    SysPermission selectByPrimaryKey(Integer permissionId);

    int updateByExampleSelective(@Param("record") SysPermission record, @Param("example") SysPermissionExample example);

    int updateByExample(@Param("record") SysPermission record, @Param("example") SysPermissionExample example);

    int updateByPrimaryKeySelective(SysPermission record);

    int updateByPrimaryKey(SysPermission record);

    /**
     * 查询所有 顶级权限 及其 子级权限
     * @return
     */
    List<SysPermission> findParentsListDetail();

    /**
     * 通过 父级权限ID 查询其所拥有的 子级权限 列表
     * @param parentId
     * @return
     */
    List<SysPermission> findChildrensListByParentId(Integer parentId);

    /**
     * 分页查询 权限列表 数据
     * @param first
     * @param pageCounts
     * @return
     */
    List<SysPermission> findPageList(Integer first, Integer pageCounts);

    /**
     * 查询 Dtree 数据结构,用于前端 下拉框选择, 查询 delete_status = '0' 表示未删除的数据
     * @return
     */
    List<DTree> dtree();


    /**
     * 根据 RoleId 查询关联的角色权限（sys_role_permission 属于全删除全增系列）
     * @param roleId
     * @return
     */
    List<SysPermission> findRolePermissionRelationByRoleId(Integer roleId);

    /**
     * 根据 RoleId 删除关联 的 SysPermission
     * @param roleId
     * @return
     */
    int deleteRolePermissionRelationByRoleId(Integer roleId);

    /**
     * 根据 roleId 和 permissionIds 创建两者间的关联关系
     * @param roleId
     * @param permsids
     * @return
     */
    int insertRolePermissionRelation(@Param("rid") Integer roleId, @Param("pids") List<Integer> permsids);

    /**
     * 根据 roleIds 查询出 对应的 permissionId
     * @param menuIds
     * @return
     */
    List<Integer> findPermissionIdsByMenuIds(List<Integer> menuIds);

    /**
     * 批量修改 delete_status 状态 '0' -> '1'
     * @param userids
     * @param username
     * @return
     */
    int updateDeleteStatusByIds(@Param("ids") List<Integer> userids, @Param("updateBy") String username);

    /**
     * 根据 UrlId 查询 SysUrl SysPermission 的关联关系
     * 一条 Url 对应一条 SysPermission, 一条 SysPermission 对应多条 Url
     * @param urlId
     * @return
     */
    List<SysPermission> findUrlPermissionRelationByUrlId(Integer urlId);

    /**
     * 根据 urlId 删除表 sys_url_permission 中的 URL 与 Permission 的关联关系，全部删除
     *
     * @param urlId
     * @return
     */
    int deleteUrlPermissionRelationByUrlId(Integer urlId);

    /**
     * 通过 URL 与 Permission 的主键建立双方关联关系 sys_url_permission，一条URL对应一条Permission，一条Permission对应多条Url
     * @param urlId
     * @param permissionId
     * @return
     */
    int insertUrlPermissionRelation(@Param("urlId") Integer urlId, @Param("permissionId") Integer permissionId);
}